package 力扣题库;

import java.util.HashMap;
import java.util.Map;

public class p169多数元素 {
    public int majorityElement(int[] nums) {
        //哈希表
        HashMap<Integer,Integer> record=recordNums(nums);

        //Map.Entry<Integer, Integer> 是 Map接口中的内部接口
        //这个接口能够 表示 Map中的一个实体， 即一个key-vlaue实体
        Map.Entry<Integer,Integer> kV=null;
        for (Map.Entry<Integer,Integer> curkV : record.entrySet()) {
            //entrySet() 是HashMap中返回映射中包含映射的 Set 视图。
            //简单来讲，Set视图 就是HashMap中 所有键值对 都被当成 一个set集合。
            //entrySet()返回值也是返回一个Set集合，此集合的类型为Map.Entry。
            if (kV==null || curkV.getValue()>kV.getValue()) {
                kV=curkV;
            }
        }
        return kV.getKey();
    }

    private HashMap<Integer, Integer> recordNums(int[] nums) {
        HashMap<Integer,Integer> res=new HashMap<>();

        for(int num:nums) {
            if (!res.containsKey(num)) {
                //当前 key 还没有存入 map
                res.put(num,1);
            }else {
                //当前 key 已存入 map,则需要对 value+1
                res.put(num,res.get(num)+1);
            }
        }
        return res;
    }
}
